#include <REGX52.H>

void delay_ms(unsigned int ms)
{
    unsigned int i, j;
    for (i = 0; i < ms; i++)
    {
        for (j = 0; j < 123; j++)
            ;
    }
}

void main()
{
     unsigned char led_state; // 存 LED 状态
    while (1) { 
        // 1. 从左到右流水灯（假设 LED 共阴极，低电平点亮；共阳极则反过来）
        for (led_state = 0x01; led_state != 0x80; led_state <<= 1) { 
            P2 = ~led_state; // 左移逐位点亮（共阴极时，取反让对应位低电平）
            delay_ms(300);   // 流水间隔，可调整速度
        }
        // 最后一个灯（D8 对应 P2.7 ）点亮后，进入全亮
        P2 = 0x00; // 共阴极时，P2 全 0 代表所有灯亮（若共阳极则 P2=0xFF ）
        delay_ms(1000); // 全亮持续时间
        
        // 2. 重新从左向右流水，循环
        // 这里可简单回到初始，再执行一次流水逻辑；或优化过渡，看需求
        // 比如先灭灯再重新流水
        P2 = 0xFF; // 共阴极时，全 1 灭灯（共阳极则全 0 灭灯 ）
        delay_ms(500); 
    }
}